package com.example.demo.controller;

import com.example.demo.domain.dto.ResultDTO;
import com.example.demo.domain.po.Book;
import com.example.demo.domain.po.Room;
import com.example.demo.domain.query.BookQuery;
import com.example.demo.domain.query.RoomQuery;
import com.example.demo.domain.vo.BookVO;
import com.example.demo.domain.vo.RoomVO;
import com.example.demo.exception.MyException;
import com.example.demo.services.RoomServices;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
@RestController
@RequestMapping("room")
public class RoomController {
    @Autowired
    RoomServices roomServices;

    ResultDTO resultDTO = new ResultDTO();
    @GetMapping("/getAll")
    public ResultDTO getAll(ResultDTO resultDTO) {
        //通过分页插件实现！！！    ----> 前往配置文件
        //只有紧跟在PageHelper.startPage方法后的第一个Mybatis的查询（Select）方法会被分页。
        // （PageHelper 启动了一个新的线程）   当前页
        PageHelper.startPage(resultDTO.getPageNum(),resultDTO.getPageSize());
        List<RoomVO> all = roomServices.getAll();//startpage下面第一句话需要消费掉分页信息
        PageInfo<RoomVO> pageInfo = new PageInfo<>(all);
        //分页结束
        PageHelper.clearPage();

        if(resultDTO.getPageNum() <= 0 || resultDTO.getPageSize() <= 0){
            throw new MyException("当前页面数或者每页行数未设置（或为0）！");
        }
        //补齐总页数与总行数
        resultDTO.setPages(pageInfo.getPages());
        resultDTO.setTotal(pageInfo.getTotal());

        resultDTO.setData(all);
        resultDTO.setMessage("全局查询成功！");

//        Object o = ThreadLocalUtil.get();
//        System.out.println("当前用户： "+o);
        return resultDTO;
    }

    @GetMapping("/fuzzySearch")
    public ResultDTO fuzzySearch(@RequestParam(name = "pageNum", required = false, defaultValue = "1") int pageNum,
                                 @RequestParam(name = "pageSize", required = false, defaultValue = "10") int pageSize, RoomQuery roomQuery) {
        //通过分页插件实现！！！    ----> 前往配置文件
        //只有紧跟在PageHelper.startPage方法后的第一个Mybatis的查询（Select）方法会被分页。
        // （PageHelper 启动了一个新的线程）
        PageHelper.startPage(pageNum,pageSize);
        List<RoomVO> all = roomServices.fuzzySearch(roomQuery);
        PageInfo<RoomVO> pageInfo = new PageInfo<>(all);
        //分页结束
        PageHelper.clearPage();

//        if(resultDTO.getPageNum() <= 0 || resultDTO.getPageSize() <= 0){
//            throw new MyException("当前页面数或者每页行数未设置（或为0）！");
//        }
        //补齐总页数与总行数
        resultDTO.setPages(pageInfo.getPages());
        resultDTO.setTotal(pageInfo.getTotal());

        resultDTO.setData(all);
        resultDTO.setMessage("检索成功！");
        return resultDTO;
    }

    @GetMapping("get")
    public ResultDTO get(int id) {
        resultDTO.setMessage("按ID查询成功！");
        resultDTO.setData(roomServices.get(id));
        return resultDTO;
    }
    @PostMapping("edit")
    public ResultDTO edit(@RequestBody Room room) {
        roomServices.edit(room);
        resultDTO.setMessage("修改成功！");
        return resultDTO;
    }

    @PostMapping("/add")
    public ResultDTO add(@RequestBody Room Room) {
        roomServices.add(Room);
        resultDTO.setMessage("添加成功！");

        return resultDTO;
    }

    @GetMapping("del")
    public ResultDTO del(int id) {
        roomServices.del(id);
        resultDTO.setMessage("删除成功！");
        return resultDTO;
    }
}
